knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, fig.align='center', cache=TRUE,
                      autodep = TRUE)

options(mc.cores = parallel::detectCores())
source("./source/read_data.R")

pal = brewer.pal(11, "RdBu")[c(2,4,11,10)]
summary(mn$P1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2440  0.6393  0.9547  1.1701  1.3862  6.9291
summary(whole_cc$P1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.2440  0.6261  0.9206  1.2289  1.4288 10.0907

Outliers

We removed two outliers for the main analysis.

# whole_cc = complete cases
# This is the model with outliers included
mod = lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU  + M_AGE +
              MARITAL_STATUS + HOME_SCORE + mat_hard
             , data = whole_cc)
summary(mod)
## 
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU + 
##     M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = whole_cc)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -43.649  -8.209   0.684   8.871  28.071 
## 
## Coefficients:
##                             Estimate Std. Error t value             Pr(>|t|)
## (Intercept)                101.35681    2.06312  49.128 < 0.0000000000000002
## P1                          -0.32796    1.04128  -0.315             0.753029
## SEXFemales                  -1.79678    2.28932  -0.785             0.433208
## M_IQ                         3.05885    0.80976   3.777             0.000194
## ALCOHOLYes                  -5.78965    1.70620  -3.393             0.000791
## M_EDU< High school degree   -1.10596    1.65639  -0.668             0.504883
## M_AGE                        1.20347    0.84861   1.418             0.157266
## MARITAL_STATUSEver Married  -0.02059    1.70476  -0.012             0.990370
## HOME_SCORE                   2.50284    0.76826   3.258             0.001262
## mat_hardYes                 -2.23735    1.53031  -1.462             0.144864
## P1:SEXFemales               -0.15397    1.40791  -0.109             0.912998
##                               
## (Intercept)                ***
## P1                            
## SEXFemales                    
## M_IQ                       ***
## ALCOHOLYes                 ***
## M_EDU< High school degree     
## M_AGE                         
## MARITAL_STATUSEver Married    
## HOME_SCORE                 ** 
## mat_hardYes                   
## P1:SEXFemales                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.45 on 278 degrees of freedom
## Multiple R-squared:  0.164,  Adjusted R-squared:  0.134 
## F-statistic: 5.455 on 10 and 278 DF,  p-value: 0.0000002148
plot(mod)

# Individual 272 influential based on Cooks distance, residual vs. leverage plot
ols_plot_cooksd_chart(mod)

ols_plot_resid_lev(mod)

# get rid of highest
whole_m1 = whole_cc[-which.max(whole_cc$P1),]
mod2 = lm(WISC ~ P1 + SEX*P1 + SEX + SEX + M_IQ + ALCOHOL + M_EDU  + M_AGE +
              MARITAL_STATUS + HOME_SCORE + mat_hard
             , data = whole_m1)
summary(mod2)
## 
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + SEX + M_IQ + ALCOHOL + 
##     M_EDU + M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = whole_m1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -43.703  -8.060   0.495   9.058  28.178 
## 
## Coefficients:
##                            Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)                101.7238     2.0647  49.268 < 0.0000000000000002 ***
## P1                          -0.3697     1.0373  -0.356             0.721795    
## SEXFemales                  -0.2522     2.4346  -0.104             0.917572    
## M_IQ                         3.0265     0.8067   3.752             0.000214 ***
## ALCOHOLYes                  -5.6243     1.7017  -3.305             0.001075 ** 
## M_EDU< High school degree   -1.3949     1.6574  -0.842             0.400716    
## M_AGE                        1.2085     0.8452   1.430             0.153885    
## MARITAL_STATUSEver Married  -0.3311     1.7065  -0.194             0.846292    
## HOME_SCORE                   2.3739     0.7684   3.089             0.002210 ** 
## mat_hardYes                 -2.5732     1.5354  -1.676             0.094870 .  
## P1:SEXFemales               -1.6121     1.6173  -0.997             0.319735    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.4 on 277 degrees of freedom
## Multiple R-squared:  0.1698, Adjusted R-squared:  0.1398 
## F-statistic: 5.666 on 10 and 277 DF,  p-value: 0.0000001013
plot(mod2)

# cooks dist for 264
ols_plot_cooksd_chart(mod2)

ols_plot_resid_lev(mod2)

# Individual 264 influential based on Cooks distance, residual vs. leverage plot

grubbs.test(log(whole_cc$P1)) # highest values is an outlier
## 
##  Grubbs test for one outlier
## 
## data:  log(whole_cc$P1)
## G = 3.77043, U = 0.95047, p-value = 0.01967
## alternative hypothesis: highest value 2.31161455316489 is an outlier
grubbs.test(log(whole_m1$P1))
## 
##  Grubbs test for one outlier
## 
## data:  log(whole_m1$P1)
## G = 3.30028, U = 0.96192, p-value = 0.1253
## alternative hypothesis: highest value 1.96633990278861 is an outlier

Viz

# Fit the gam to whole data including outliers
fit_sense <- gam(WISC ~ s(P1, by = SEX) + SEX + M_IQ + ALCOHOL + M_EDU + 
                   MARITAL_STATUS + HOME_SCORE + M_AGE + mat_hard, 
                 data = whole_cc)
summary(fit_sense)
## 
## Family: gaussian 
## Link function: identity 
## 
## Formula:
## WISC ~ s(P1, by = SEX) + SEX + M_IQ + ALCOHOL + M_EDU + MARITAL_STATUS + 
##     HOME_SCORE + M_AGE + mat_hard
## 
## Parametric coefficients:
##                            Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)                101.1042     1.5253  66.287 < 0.0000000000000002 ***
## SEXFemales                  -2.0798     1.4726  -1.412             0.158972    
## M_IQ                         3.0734     0.8048   3.819             0.000165 ***
## ALCOHOLYes                  -5.5515     1.7010  -3.264             0.001238 ** 
## M_EDU< High school degree   -1.2601     1.6480  -0.765             0.445157    
## MARITAL_STATUSEver Married  -0.1544     1.6958  -0.091             0.927513    
## HOME_SCORE                   2.3730     0.7668   3.095             0.002173 ** 
## M_AGE                        1.1344     0.8440   1.344             0.180036    
## mat_hardYes                 -2.4887     1.5263  -1.631             0.104116    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Approximate significance of smooth terms:
##                    edf Ref.df     F p-value
## s(P1):SEXMales   1.000  1.000 0.117   0.733
## s(P1):SEXFemales 1.978  2.433 1.344   0.216
## 
## R-sq.(adj) =  0.146   Deviance explained = 17.8%
## GCV = 159.61  Scale est. = 153       n = 289
# get predicted values 
pred = as.data.frame(predict.gam(fit_sense, se.fit = T, type="terms"))

# Create a dataframe to predict for females
const = tibble(P1 = seq(min(whole_cc$P1), max(whole_cc$P1), length=289)) %>% 
  mutate(SEX = "Females",
         M_IQ = 0, 
         ALCOHOL = as_factor("No"),
         M_EDU = "≥ High school degree or equivalent", 
         M_AGE = 0, 
         mat_hard = "No",
         MARITAL_STATUS = "Never Married", 
         HOME_SCORE = 0)

pred_f = as.data.frame(predict.gam(fit_sense, newdata = const, se.fit = T, type="terms"))

# This gets smooth CI for females
sense_f = as_tibble(pred_f) %>% 
  bind_cols(., const) %>% 
  dplyr::select(grep("(SEX|P1)", names(.))) %>%
  mutate(predIQ = mean(whole_cc$WISC) + fit.SEX + fit.s.P1..SEXMales + fit.s.P1..SEXFemales,
         se= se.fit.SEX + se.fit.s.P1..SEXMales + se.fit.s.P1..SEXFemales,
         lci = predIQ - 1.96*se,
         uci = predIQ + 1.96*se) %>% 
  mutate(model = "Sensitivity") %>% 
  dplyr::select(-grep("fit", names(.)))

# combine and create CI
sense_all = whole_cc %>%
  bind_cols(., pred) %>% 
  mutate(extreme = ifelse(SID %in% c(1209, 1229), "Yes", "No")) %>% 
  dplyr::select(WISC, grep("(SEX|P1)", names(.)), extreme) %>% 
  mutate(predIQ = mean(WISC) + fit.SEX + fit.s.P1..SEXMales + fit.s.P1..SEXFemales,
         se= se.fit.SEX + se.fit.s.P1..SEXMales + se.fit.s.P1..SEXFemales,
         lci = predIQ - 1.96*se,
         uci = predIQ + 1.96*se,
         model = "Sensitivity") %>% 
  dplyr::select(-grep("fit", names(.)))

# Just whole data
sense_all %>% 
  ggplot(aes(x = P1, group = interaction(SEX, model),fill = interaction(SEX, model))) +
  geom_point(aes(y = WISC), alpha=0.25, color="grey") +
  geom_point(aes(y = WISC), color="black",
             data = subset(sense_all, extreme =="Yes")) +
  geom_ribbon(aes(ymin = lci,
                  ymax = uci), 
              alpha = 0.5, data = subset(sense_all, SEX == "Males")) +
  geom_line(aes(y = predIQ),
            data = subset(sense_all, SEX == "Males")) + 
  geom_ribbon(aes(ymin = lci,
                  ymax = uci), 
              alpha = 0.5, data = sense_f) +
  geom_line(aes(y = predIQ), data = sense_f) +
  facet_grid(.~SEX, scales = "free_x") +
  labs(y = "WISC Full Scale IQ", x = "Pattern 1 concentration") +
  theme(legend.title = element_blank())

# Main ####
# Flipping gets predicted values for females
main_flip <- lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU  + M_AGE +
                 MARITAL_STATUS + HOME_SCORE + mat_hard
               , data = mn_flip)

# this gets predicted values for males
main_fit <- lm(WISC ~ P1 + SEX*P1 + SEX + M_IQ + ALCOHOL + M_EDU  + M_AGE +
                MARITAL_STATUS + HOME_SCORE + mat_hard
              , data = mn)

summary(main_fit)
## 
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU + 
##     M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = mn)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -43.586  -7.838   0.460   8.873  27.991 
## 
## Coefficients:
##                            Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)                101.6730     2.0580  49.404 < 0.0000000000000002 ***
## P1                          -0.3633     1.0345  -0.351             0.725725    
## SEXFemale                    1.3009     2.6183   0.497             0.619698    
## M_IQ                         3.1176     0.8125   3.837             0.000155 ***
## ALCOHOLYes                  -5.4499     1.7007  -3.205             0.001512 ** 
## M_EDU< High school degree   -1.2929     1.6541  -0.782             0.435098    
## M_AGE                        1.0584     0.8452   1.252             0.211543    
## MARITAL_STATUSEver Married  -0.1459     1.7059  -0.086             0.931924    
## HOME_SCORE                   2.3393     0.7747   3.020             0.002767 ** 
## mat_hardYes                 -2.6158     1.5314  -1.708             0.088747 .  
## P1:SEXFemale                -3.0822     1.8606  -1.657             0.098749 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.37 on 276 degrees of freedom
##   (54 observations deleted due to missingness)
## Multiple R-squared:  0.1768, Adjusted R-squared:  0.1469 
## F-statistic: 5.926 on 10 and 276 DF,  p-value: 0.00000004004
summary(main_flip)
## 
## Call:
## lm(formula = WISC ~ P1 + SEX * P1 + SEX + M_IQ + ALCOHOL + M_EDU + 
##     M_AGE + MARITAL_STATUS + HOME_SCORE + mat_hard, data = mn_flip)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -43.586  -7.838   0.460   8.873  27.991 
## 
## Coefficients:
##                            Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)                102.9739     2.3165  44.453 < 0.0000000000000002 ***
## P1                          -3.4455     1.5549  -2.216             0.027511 *  
## SEXMale                     -1.3009     2.6183  -0.497             0.619698    
## M_IQ                         3.1176     0.8125   3.837             0.000155 ***
## ALCOHOLYes                  -5.4499     1.7007  -3.205             0.001512 ** 
## M_EDU< High school degree   -1.2929     1.6541  -0.782             0.435098    
## M_AGE                        1.0584     0.8452   1.252             0.211543    
## MARITAL_STATUSEver Married  -0.1459     1.7059  -0.086             0.931924    
## HOME_SCORE                   2.3393     0.7747   3.020             0.002767 ** 
## mat_hardYes                 -2.6158     1.5314  -1.708             0.088747 .  
## P1:SEXMale                   3.0822     1.8606   1.657             0.098749 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12.37 on 276 degrees of freedom
##   (54 observations deleted due to missingness)
## Multiple R-squared:  0.1768, Adjusted R-squared:  0.1469 
## F-statistic: 5.926 on 10 and 276 DF,  p-value: 0.00000004004
# Get predicted values
# this is conditional on everything else!
pred_main = as.data.frame(predict(main_fit, se.fit = TRUE, type = c("terms")))

# Get predicted values for females
pred_flip = as.data.frame(predict(main_flip, se.fit = TRUE, type = c("terms")))

# Combine predicted outcomes with data
# And make CI
main = 
  mn_subset %>%
  bind_cols(., pred_main) %>% 
  bind_cols(., flip.se = (pred_flip$se.fit.P1 + pred_flip$se.fit.P1.SEX)) %>% # just get se for female
  dplyr::select(SID, WISC, grep("(SEX|P)", names(.)), flip.se) %>% 
  mutate(SEX = str_c(SEX, "s"),
         predIQ = fit.P1 + mean(WISC) + fit.SEX + fit.P1.SEX, # ifelse(SEX == "Female", predIQf, predIQm),
         se.male = se.fit.P1 + se.fit.P1.SEX,
         se.female = flip.se,
         se = ifelse(SEX == "Females", se.female, se.male),
         lci = predIQ - 1.96*se,
         uci = predIQ + 1.96*se) %>% 
  dplyr::select(-grep("fit", names(.))) %>% 
  mutate(model = "Main")

# Main model fits
main %>% 
  ggplot(aes(x = P1)) +
  geom_point(aes(y = WISC), color = "lightgray", size = 0.5) + 
  geom_abline(intercept = mean(main$WISC), slope = 0, 
              color = "darkgray", linetype = "dashed") + 
  geom_line(aes(y = predIQ)) +
  geom_ribbon(aes(ymin = lci, ymax = uci),
              alpha = 0.25, linetype = "dotted", size = 0.25) +
  facet_grid(.~SEX, scales = "free_x") +
  ylim(45, 135) +
  theme_minimal(base_size = 15) + 
  theme(legend.title = element_blank(),
        legend.position = "none") +
  scale_color_lancet() + scale_fill_lancet() +
  labs(y = "WISC full scale IQ", x = "PHT pattern concentration") 

# Final plot ####
sense_plot = bind_rows(sense_all, main)

# Figure S1
sense_plot %>% 
  ggplot(aes(x = P1, group = model, fill = model)) +
  geom_point(aes(y = WISC), alpha=0.25, color="grey") +
  geom_point(aes(y = WISC), color="black",
             data = subset(sense_plot, extreme =="Yes")) +
  geom_line(aes(y = predIQ, color = model), data = sense_f) +
  geom_ribbon(aes(ymin = lci,
                  ymax = uci),
              alpha = 0.5, data = sense_f) +
  geom_ribbon(aes(ymin = lci,
                  ymax = uci), alpha = 0.5,
              data = filter(sense_plot, SEX == "Males" | model == "Main")) +
  geom_line(aes(y = predIQ, color = model),
            data = subset(sense_plot, SEX == "Males" | model == "Main")) +
  facet_grid(.~SEX, scales = "free_x") +
  labs(y = "WISC Full Scale IQ", x = "Pattern 1 concentration") +
  theme(legend.title = element_blank(),
        legend.text = element_text(size = 15)) + scale_fill_nejm() + scale_color_nejm()

Missingness

model_dat = whole %>% 
  filter(!is.na(WISC)) %>% 
  dplyr::select(-c(SID, GEST, WISC_VC, WISC_PR, WISC_PS, WISC_WM, P2))

model_dat %>% names()
##  [1] "ETH"            "M_EDU"          "MARITAL_STATUS" "SMOKER_IN_HOME"
##  [5] "SEX"            "HOME_SCORE"     "ALCOHOL"        "M_AGE"         
##  [9] "M_IQ"           "mat_hard"       "WISC"           "P1"
model_dat %>% ff_glimpse()
## $Continuous
##                                              label var_type   n missing_n
## HOME_SCORE                              HOME_SCORE    <dbl> 295        16
## M_AGE                                        M_AGE    <dbl> 311         0
## M_IQ                                      Quotient    <dbl> 303         8
## WISC       WSC_CSFS.84: Full Scale Composite Score    <dbl> 311         0
## P1                                              P1    <dbl> 311         0
##            missing_percent mean   sd  min quartile_25 median quartile_75   max
## HOME_SCORE             5.1 39.3  6.3  8.0        36.0   40.0        44.0  52.0
## M_AGE                  0.0 25.5  4.9 18.1        21.2   24.6        29.5  37.9
## M_IQ                   2.6 84.9 13.4 60.0        76.0   82.0        92.0 135.0
## WISC                   0.0 97.3 13.3 48.0        88.0   99.0       106.0 133.0
## P1                     0.0  1.2  1.0  0.2         0.6    0.9         1.4  10.1
## 
## $Categorical
##                         label var_type   n missing_n missing_percent levels_n
## ETH                       ETH    <fct> 311         0             0.0        2
## M_EDU                   M_EDU    <fct> 311         0             0.0        2
## MARITAL_STATUS MARITAL_STATUS    <fct> 311         0             0.0        2
## SMOKER_IN_HOME SMOKER_IN_HOME    <fct> 311         0             0.0        2
## SEX                       SEX    <fct> 311         0             0.0        2
## ALCOHOL               ALCOHOL    <fct> 311         0             0.0        2
## mat_hard             mat_hard    <chr> 311         0             0.0        2
##                                                                      levels
## ETH                                   "African American", "Hispanic/Latina"
## M_EDU          "≥ High school degree or equivalent", "< High school degree"
## MARITAL_STATUS                              "Never Married", "Ever Married"
## SMOKER_IN_HOME                                                  "Yes", "No"
## SEX                                                        "Male", "Female"
## ALCOHOL                                                         "No", "Yes"
## mat_hard                                                                  -
##                levels_count levels_percent
## ETH                107, 204         34, 66
## M_EDU              196, 115         63, 37
## MARITAL_STATUS     209, 102         67, 33
## SMOKER_IN_HOME      94, 217         30, 70
## SEX                166, 145         53, 47
## ALCOHOL             234, 77         75, 25
## mat_hard                  -              -
mice::md.pattern(model_dat, rotate.names = T)

##     ETH M_EDU MARITAL_STATUS SMOKER_IN_HOME SEX ALCOHOL M_AGE mat_hard WISC P1
## 289   1     1              1              1   1       1     1        1    1  1
## 14    1     1              1              1   1       1     1        1    1  1
## 6     1     1              1              1   1       1     1        1    1  1
## 2     1     1              1              1   1       1     1        1    1  1
##       0     0              0              0   0       0     0        0    0  0
##     M_IQ HOME_SCORE   
## 289    1          1  0
## 14     1          0  1
## 6      0          1  1
## 2      0          0  2
##        8         16 24
# 289 complete samples
# 14 missing only home score
# 6 missing only maternal iq
# 2 missing both

aggr(model_dat, col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE, 
     labels=names(model_dat), cex.axis=.7, gap=3, ylab=c("Histogram of missing data","Pattern"))

## 
##  Variables sorted by number of missings: 
##        Variable      Count
##      HOME_SCORE 0.05144695
##            M_IQ 0.02572347
##             ETH 0.00000000
##           M_EDU 0.00000000
##  MARITAL_STATUS 0.00000000
##  SMOKER_IN_HOME 0.00000000
##             SEX 0.00000000
##         ALCOHOL 0.00000000
##           M_AGE 0.00000000
##        mat_hard 0.00000000
##            WISC 0.00000000
##              P1 0.00000000
marginplot(model_dat[c(6,9)])

explanatory = c("ETH","M_EDU","MARITAL_STATUS","SMOKER_IN_HOME","SEX","HOME_SCORE",
                "ALCOHOL","M_AGE","mat_hard","WISC","P1")

model_m = model_dat %>% 
  mutate(home_miss = as_factor(ifelse(is.na(HOME_SCORE), 1, 0)),
         iq_miss = as_factor(ifelse(is.na(M_IQ), 1, 0)))

model_m %>% missing_compare(., dependent = "M_IQ", explanatory)
Missing data analysis: Quotient Not missingMissingp
ETHAfrican American106 (99.1)1 (0.9)0.345
Hispanic/Latina197 (96.6)7 (3.4)
M_EDU≥ High school degree or equivalent193 (98.5)3 (1.5)0.253
< High school degree110 (95.7)5 (4.3)
MARITAL_STATUSNever Married203 (97.1)6 (2.9)0.925
Ever Married100 (98.0)2 (2.0)
SMOKER_IN_HOMEYes92 (97.9)2 (2.1)1.000
No211 (97.2)6 (2.8)
SEXMale161 (97.0)5 (3.0)0.869
Female142 (97.9)3 (2.1)
HOME_SCOREMean (SD)39.4 (6.2)34.7 (7.2)0.067
ALCOHOLNo229 (97.9)5 (2.1)0.667
Yes74 (96.1)3 (3.9)
M_AGEMean (SD)25.5 (4.9)25.2 (4.2)0.861
mat_hardNo181 (98.9)2 (1.1)0.108
Yes122 (95.3)6 (4.7)
WSC_CSFS.84: Full Scale Composite ScoreMean (SD)97.4 (13.3)91.5 (11.6)0.213
P1Mean (SD)1.2 (1.0)1.1 (0.6)0.836
explanatory = c("ETH","M_EDU","MARITAL_STATUS","SMOKER_IN_HOME","SEX","M_IQ",
                "ALCOHOL","M_AGE","mat_hard","WISC","P1")

model_m %>% missing_compare(., dependent = "HOME_SCORE", explanatory) 
Missing data analysis: HOME_SCORE Not missingMissingp
ETHAfrican American101 (94.4)6 (5.6)1.000
Hispanic/Latina194 (95.1)10 (4.9)
M_EDU≥ High school degree or equivalent189 (96.4)7 (3.6)0.170
< High school degree106 (92.2)9 (7.8)
MARITAL_STATUSNever Married199 (95.2)10 (4.8)0.890
Ever Married96 (94.1)6 (5.9)
SMOKER_IN_HOMEYes91 (96.8)3 (3.2)0.455
No204 (94.0)13 (6.0)
SEXMale158 (95.2)8 (4.8)0.983
Female137 (94.5)8 (5.5)
QuotientMean (SD)84.8 (13.5)87.4 (12.2)0.470
ALCOHOLNo220 (94.0)14 (6.0)0.385
Yes75 (97.4)2 (2.6)
M_AGEMean (SD)25.6 (4.9)23.8 (4.9)0.142
mat_hardNo174 (95.1)9 (4.9)1.000
Yes121 (94.5)7 (5.5)
WSC_CSFS.84: Full Scale Composite ScoreMean (SD)97.2 (13.4)99.1 (11.3)0.579
P1Mean (SD)1.2 (1.1)1.1 (0.6)0.521